// wxapi.js
import wx from 'weixin-js-sdk'
import axios from './axios'
const wxApi = {
  /**
   * [isweixin 判断是否微信浏览器]
   */
  isweixin() {
    const ua = navigator.userAgent.toLowerCase()
    if (ua.match(/MicroMessenger/i) == 'micromessenger') {
      return true
    } else {
      return false
    }
  },
  isAndroid() {
    var u = navigator.userAgent
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1
    if (isAndroid) {
      return true
    } else {
      return false
    }
  },
  iosUrlRefresh(to) {
    const iosRandom = 'iosRandom=' + new Date().getTime() // 新增随机参数
    let url = location.protocol + '//' + location.host + '/apply' + to// 重组url 注意项目路径
    if (url.indexOf('?') > 0) {
      url = url + '&' + iosRandom
    } else {
      url = url + '?' + iosRandom
    }
    window.location.replace(url)
    this.getCurrentUrl()
  },
  // 清除url中手动新增的随机数iosRandom
  getCurrentUrl() {
    const url = location.href.replace(/&iosRandom=[0-9]{13}/g, '')
    window.history.replaceState({}, document.title, url)
  },
  /**
   * [wxRegister 微信Api初始化]
   * @param  {Function} callback [ready回调函数]
   */
  wxRegister(callback) {
    const activeurl = window.location.href.split('#')[0]
    axios.get(`/API-ENTERPRISE-APP/app/wechat/getWechatConfig?url=${activeurl}`,).then(res => {
      wx.config({
        debug: false, // 开启调试模式
        appId: res.data.appId, // 必填，公众号的唯一标识
        timestamp: res.data.timeStamp, // 必填，生成签名的时间戳
        nonceStr: res.data.noncestr, // 必填，生成签名的随机串
        signature: res.data.signature, // 必填，签名，见附录1
        jsApiList: [
          'checkJsApi',
          'onMenuShareTimeline',
          'onMenuShareAppMessage',
          'onMenuShareQQ',
          'onMenuShareWeibo',
          'hideMenuItems',
          'showMenuItems',
          'hideAllNonBaseMenuItem',
          'showAllNonBaseMenuItem',
          'translateVoice',
          'startRecord',
          'stopRecord',
          'onRecordEnd',
          'playVoice',
          'pauseVoice',
          'stopVoice',
          'uploadVoice',
          'downloadVoice',
          'chooseImage',
          'previewImage',
          'uploadImage',
          'downloadImage',
          'getNetworkType',
          'openLocation',
          'getLocation',
          'hideOptionMenu',
          'showOptionMenu',
          'closeWindow',
          'scanQRCode',
          'chooseWXPay',
          'openProductSpecificView',
          'addCard',
          'chooseCard',
          'openCard',
          'openWXDeviceLib',
          'closeWXDeviceLib',
          'configWXDeviceWiFi',
          'getWXDeviceInfos',
          'sendDataToWXDevice',
          'startScanWXDevice',
          'stopScanWXDevice',
          'connectWXDevice',
          'disconnectWXDevice',
          'getWXDeviceTicket',
          'WeixinJSBridgeReady',
          'onWXDeviceBindStateChange',
          'onWXDeviceStateChange',
          'onScanWXDeviceResult',
          'onReceiveDataFromWXDevice',
          'onWXDeviceBluetoothStateChange'
        ]
      })
      wx.ready((res) => {
        // 如果需要定制ready回调方法
        if (callback) {
          callback()
        }
      })
    }).catch(() => { })
  },
  /**
   * [ShareTimeline 微信分享到朋友圈]
   * @param {[type]} opstion [分享信息]
   * @param {[type]} success [成功回调]
   * @param {[type]} error   [失败回调]
   */
  ShareTimeline(opstion) {
    wx.onMenuShareTimeline({
      title: opstion.title, // 分享标题
      link: opstion.link, // 分享链接
      imgUrl: opstion.imgUrl, // 分享图标
      success() {
        // 用户成功分享后执行的回调函数
        opstion.success()
      },
      cancel() {
        // 用户取消分享后执行的回调函数
        opstion.error()
      }
    })
  },
  /**
   * [ShareAppMessage 微信分享给朋友]
   * @param {[type]} opstion [分享信息]
   * @param {[type]} success [成功回调]
   * @param {[type]} error   [失败回调]
   */
  ShareAppMessage(opstion) {
    wx.onMenuShareAppMessage({
      title: opstion.title, // 分享标题
      desc: opstion.desc, // 分享描述
      link: opstion.link, // 分享链接
      imgUrl: opstion.imgUrl, // 分享图标
      success() {
        // 用户成功分享后执行的回调函数
        opstion.success()
      },
      cancel() {
        // 用户取消分享后执行的回调函数
        opstion.error()
      }
    })
  },
  /**
   * [isWxAuth 微信授权]
   */
  isWxAuth() {
    const localUid = localStorage.getItem('localUid')
    const localToken = localStorage.getItem('localToken')
    if (!localToken) {
      const token = this.$route.query.token
      const uid = this.$route.query.uid
      if (token) {
        localStorage.setItem('localToken', token)
        localStorage.setItem('localUid', uid)
      } else {
        // 将url编码后传给后端，解决微信过滤Vue hash模式 #被过滤的问题
        var u = encodeURIComponent(window.location.href)
        window.location.href = hostName + '/wxpl/oauth?forwardUrl=' + u
      }
    }
  },

  checkApi() {
    wx.checkJsApi({
      jsApiList: ['chooseImage', 'uploadImage'], // 需要检测的JS接口列表，所有JS接口列表见附录2,
      success: (res) => {
        // 以键值对的形式返回，可用的api值true，不可用为false
        // 如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
        return true
      },
      fail() {
        return false
      }
    })
  },
  /**
   * [chooseImage 选择图片]
   */
  chooseImg() {
    return new Promise((resolve, reject) => {
      wx.chooseImage({
        count: 1, // 默认9
        sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
        sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
        success: (res) => {
          if (res && res.localIds && res.localIds[0]) {
            console.log('chooseImg======', res)
            resolve(res.localIds[0])
          } else {
            reject()
          }
        },
        fail: (error) => {
          reject(error)
        }
      })
    })
  },
  /**
   * 上传图片
   */
  uploadImg(localId) {
    return new Promise((resolve, reject) => {
      wx.uploadImage({
        localId: localId, // 需要上传的图片的本地ID，由chooseImage接口获得
        isShowProgressTips: 1, // 默认为1，显示进度提示
        success: (res) => {
          console.log('uploadImg======', res)
          resolve(res.serverId)
        },
        fail: (error) => {
          reject(error)
        }
      })
    })
  },

  /**
   * 下载图片接口
   */
  downloadImg(opstion) {
    wx.downloadImage({
      serverId: opstion.serverId, // 需要下载的图片的服务器端ID，由uploadImage接口获得
      isShowProgressTips: 1, // 默认为1，显示进度提示

      success: function (res) {
        opstion.success(res.localId) // 返回图片下载后的本地ID
      },
      fail: function (error) {
        opstion.fail(error)
        // return '';
      }
    })
  },

  /**
   * 获取本地图片接口
   */
  getLocalImg(localId) {
    return new Promise((resolve, reject) => {
      wx.getLocalImgData({
        localId: localId, // 图片的localID
        success: (res) => {
          console.log('getLocalImg======', res)
          resolve(res.localData) // localData是图片的base64数据，可以用img标签显示
        },
        fail: (error) => {
          reject(error)
        }
      })
    })
  },
  /**
   * 微信支付
   * @param res
   */
  wxPay(res, callback) {
    wx.chooseWXPay({
      // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。
      appId: res.appId,
      // 但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
      timestamp: res.timeStamp,
      // 支付签名随机串，不长于 32 位
      nonceStr: res.nonceStr,
      package: res.package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
      signType: res.signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
      paySign: res.sign, // 支付签名
      success: function (res) {
        if (callback) {
          callback(res)
        }
      },
      fail: function (res) {
        console.log('支付失败')
        if (callback) {
          callback(res)
        }
      },
      complete: function (res) {
        console.log(res, 'complete')
        if (callback) {
          callback(res)
        }
      }
    })
  }

}
export default wxApi
